/**
 * @(#)TituloK.java Feb 3, 2007
 *
 * Copyright (c) 2005-2010 Psiqueware S.A. de C.V. All Rights Reserved.
 * This software is the proprietary information Psiqueware S.A. de C.V.
 * Use is subject to license terms.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *
 * <br/>Usuario : AngelElectrico
 * <br/>Creaci&oacute;n: Feb 3, 2007 - 12:23:31 PM
 * <br/>
 * <br/>
 * <br/><t5>Cambios :</t5>
 * <br/><b>Fecha | Autor  |  Cambios</b>
 * <ul>
 * <li>Feb 3, 2007 | <a href = "mailto:AngelElectrico@PsiqueWare.com">Angel El&eacute;ctrico</a> | Creaci&oacute;n del Objeto.</li>
 *
 * </ul>
 */

package com.psiqueware.alheli.seguridad.modelo;

import com.psiqueware.alheli.basico.BaseObject;
import com.psiqueware.alheli.seguridad.*;

/**
 * Acredita la posesi&oacute;n de una {@link Propiedad}. De tal que &uacute;nicamente el {@link UsuarioSeguridad} establecido como
 * Due&ntilde;o puede realizar operaciones sobre esta {@link Propiedad}.
 * <br/>Paquete Original: com.psiqueware.basico.seguridad.modelo
 * <br/>Nombre  Original: TituloK
 * <br/>Oprima para ver : <a href="TituloK.java.html"><i>C&oacute;digo Fuente</i> </a>
 *
 * @author <a href="mailto:AngelElectrico@PsiqueWare.com">Angel El&eacute;ctrico</a>
 * @version Revision: 1.1 Feb 3, 2007 12:23:31 PM
 * @noinspection ClassWithoutLogger
 */
public final class TituloK extends BaseObject implements Titulo
{

    /**
     * Nombre calificado de la clase implementadora de {@link Propiedad} y que contiene este {@link Titulo}.  No deber&iacute;a utilizarse fuera de este m&oacute;dulo.
     */
    private String m_nombreClasePropiedad;

    /**
     * Identificador unico de la Decoracion titulada.
     */
    private Long m_idPropiedad;

    /**
     * Credencial que identifica al poseedor de este {@link Titulo}.
     */
    private Long m_idAgrupacion;

    /**
     * {@link Permiso} para utilizar esta {@link Propiedad}.
     */
    private Permiso m_permisoUsoPropiedad;

    /**
     * Clave para identificar este {@link Titulo} de entre los otros.
     */
    private String m_clave;

    /**
     * Constructor de TituloK.
     */
    public TituloK()
    {

    }

    /**
     * Construye un {@link Titulo} a partir de sus componentes.
     *
     * @param propiedad  a titular.
     * @param agrupacion propietaria.
     * @param clave      del {@link Titulo} para facilitar identificarlo.
     */
    public TituloK(final Propiedad propiedad, final Agrupacion agrupacion, final String clave)
    {
        setIdPropiedad(propiedad.getId());
        setNombreClasePropiedad(propiedad.getClass().getCanonicalName());
        setIdAgrupacion(agrupacion.getId());
        setClave(clave);
    }


    /**
     * Devuelve el {@link Permiso} para utilizar esta {@link Propiedad}.
     *
     * @return valor de 'permiso'.
     *
     * @see Permiso
     */
    public Permiso getPermiso()
    {
        return m_permisoUsoPropiedad;
    }

    /**
     * Establece el {@link Permiso} para utilizar esta {@link Propiedad}.
     *
     * @param permisoPropiedad nuevo valor para 'permiso'.
     *
     * @see Permiso
     */
    public void setPermiso(final Permiso permisoPropiedad)
    {
        m_permisoUsoPropiedad = permisoPropiedad;
    }

    /**
     * Devuelve el Credencial que identifica al poseedor de este {@link Titulo}.
     *
     * @return valor de 'propietario'.
     *
     * @see Credencial
     */
    public Long getIdAgrupacion()
    {
        return m_idAgrupacion;
    }

    /**
     * Establece el Credencial que identifica al poseedor de este {@link Titulo}.
     *
     * @param idAgrupacion nuevo valor para 'propietario'.
     *
     * @see Credencial
     */
    public void setIdAgrupacion(final Long idAgrupacion)
    {
        m_idAgrupacion = idAgrupacion;
    }

    /**
     * Devuelve el Identificador unico de la Decoracion titulada.
     *
     * @return valor de 'idPropiedad'.
     */
    public Long getIdPropiedad()
    {
        return m_idPropiedad;
    }

    /**
     * Establece el Identificador unico de la Decoracion titulada.
     *
     * @param idPropiedad nuevo valor para 'idPropiedad'.
     */
    public void setIdPropiedad(final Long idPropiedad)
    {
        m_idPropiedad = idPropiedad;
    }

    /**
     * Devuelve el Nombre calificado de la clase implementadora de {@link Propiedad} y que contiene este {@link Titulo}.  No deber&iacute;a utilizarse fuera de este m&oacute;dulo.
     *
     * @return valor de 'clasePropiedad'.
     *
     * @see String
     */
    public String getNombreClasePropiedad()
    {
        return m_nombreClasePropiedad;
    }

    /**
     * Establece el Nombre calificado de la clase implementadora de {@link Propiedad} y que contiene este {@link Titulo}.  No deber&iacute;a utilizarse fuera de este m&oacute;dulo.
     *
     * @param nombreClasePropiedad nuevo valor para 'clasePropiedad'.
     *
     * @see String
     */
    public void setNombreClasePropiedad(final String nombreClasePropiedad)
    {
        m_nombreClasePropiedad = nombreClasePropiedad;
    }

    /**
     * Convierte este {@link Titulo} a su representaci&oacute;n textual.
     *
     * @noinspection DuplicateStringLiteralInspection, HardCodedStringLiteral, HardcodedLineSeparator
     */
    public String toString()
    {
        StringBuilder sb = new StringBuilder();
        sb.append("<Instance Class = '").append(this.getClass().getCanonicalName()).append("'>");
        sb.append("<clasePropiedad>").append(m_nombreClasePropiedad).append("</clasePropiedad> ");
        sb.append("<idPropiedad>").append(m_idPropiedad).append("</idPropiedad> ");
        sb.append("<propietario>").append(m_idAgrupacion).append("</propietario> ");
        sb.append("<permiso>").append(m_permisoUsoPropiedad).append("</permiso> ");
        sb.append("</Instance>");
        return sb.toString();
    }

    /**
     * Devuelve el Clave para identificar este {@link Titulo} de entre los otros.
     *
     * @return valor de 'clave'.
     *
     * @see String
     */
    public String getClave()
    {
        return m_clave;
    }

    /**
     * Establece el Clave para identificar este {@link Titulo} de entre los otros.
     *
     * @param clave nuevo valor para 'clave'.
     *
     * @see String
     */
    public void setClave(final String clave)
    {
        m_clave = clave;
    }


    /**
     * Devuelve el {@link Permiso} para utilizar esta {@link Propiedad}.
     *
     * @return valor de 'permisoUsoPropiedad'.
     *
     * @see Permiso
     */
    public Permiso getPermisoUsoPropiedad()
    {
        return m_permisoUsoPropiedad;
    }

    /**
     * Establece el {@link Permiso} para utilizar esta {@link Propiedad}.
     *
     * @param permisoUsoPropiedad nuevo valor para 'permisoUsoPropiedad'.
     *
     * @see Permiso
     */
    public void setPermisoUsoPropiedad(final Permiso permisoUsoPropiedad)
    {
        m_permisoUsoPropiedad = permisoUsoPropiedad;
    }
}

